#ifndef MYPAINT_H
#define MYPAINT_H

#include <QMainWindow>
#include <QPaintEvent>
#include <QMouseEvent>
#include <QPainter>
#include <QVector>
#include <QPoint>
#include <QToolBar>
#include <QAction>
#include <QPalette>
#include <QColor>
#include <QSpinBox>
#include <QMenu>
#include <QFileDialog>
#include <QTextEdit>
#include <QClipboard>
#include "fontsettings.h"
#include "help.h"
#include "savepicture.h"


class MyPaint : public QMainWindow
{
    Q_OBJECT
public:
    explicit MyPaint(QWidget *parent = 0);
protected:
    void paintEvent(QPaintEvent *);//重写窗体重绘事件
    void mousePressEvent(QMouseEvent *);//重写鼠标按下事件
    void mouseReleaseEvent(QMouseEvent *);//重写鼠标释放事件
    void mouseMoveEvent(QMouseEvent *);//重写鼠标移动事件
    void contextMenuEvent(QContextMenuEvent *);//重写菜单事件
    void keyPressEvent(QKeyEvent *e); //重写按键事件
    void wheelEvent(QWheelEvent *e);//重写滚轮事件
public:
private:
    int _lpress;//左键按下标志
    int _drag;//拖拽标志
    int _drawType;//描绘类型
    QMenu *_Rmenu;//右键菜单
    int _openflag;//打开图片
    QPixmap _pixmap;//画布图片
    QTextEdit *_tEdit;//文本输入框
    FontSettings *fs; //浮窗
    Help *help;//帮助界面
    int _cutFlag;//判断是否剪切

public:
    QVector<QVector<QPoint> > _lines;//线条集合(一条线条可包含多个线段)
    QVector<QColor> _linesColor;//线条的颜色
    QVector<int> _linesSize;//线条的粗细
    QVector<QVector<QPoint> > _waterPens;//记号笔集合
    QVector<QColor> _waterPensColor;
    QVector<int> _waterPensSize;
    QVector<QVector<QPoint> >_rubber;//橡皮
    QVector<int> _rubberSize;
    QVector<QVector<QPoint> >_brush;//刷子
    QVector<QColor> _brushColor;
    QVector<int> _brushSize;
    QVector<QVector<double>> _brushSpeed; //计算刷子的画线速度
    QVector<QVector<long>> _brushTime; //记录点的时间
    QVector<QRect> _rects;//矩形集合
    QVector<QColor> _rectsColor;
    QVector<int> _rectsSize;
    QVector<QRect> _ellipse;//椭圆集合
    QVector<QColor> _ellipseColor;
    QVector<int> _ellipseSize;
    QVector<QRect>  _line;//直线集合
    QVector<QColor> _lineColor;
    QVector<int> _lineSize;
    QVector<QString>  _text;//文字集合
    QVector<QPoint>  _tpoint;//文字位置集合
    QVector<int> _textSize;//文字大小
    QVector<QColor> _textColor;//文字颜色
    QVector<QFont> _textFont;//文字类型
    QVector<int>  _shape;//图形类型集合，用于撤回功能
    QPoint _begin;//鼠标按下坐标、用于最后一个图形移动
    QColor penColor;//画笔颜色、画笔粗细
    int penSize;
    QSpinBox * _sbox;
    double scale = 1.0; //缩放大小
    int fSize;//字体大小
    QColor fColor;//字体颜色
    QFont fFont;//字体类型
    QVector<QRect> _cutBefore;//剪切前位置
    QVector<QRect> _cutAfter;//剪切后位置
    QVector<QImage> _cutImage;//剪切的图片
    QVector<QVector<QPoint>> _penGun;//喷枪
    QVector<QColor> _penGunColor;
    QVector<int> _penGunSize;
    QVector<QVector<QPointF>> _pointPenPoint;//记录喷枪点
    QVector<int> _pointNumber;//每个点对应的点数

signals:

public slots:
    void Lines();//铅笔画线
    void Rubber();//橡皮擦
    void SavePic();//保存图片
    void SaveasPic();//另存为
    void Rects();//画矩形
    void Ellipses();//画椭圆
    void Line();//画直线
    void OpenPic();//打开图片
    void Texts();//文字
    void AddTexts();//添加文字
    void color(); //获取画笔的颜色
    void NewFile(); //新建文件
    void recvFontColor(QColor fColor);//接受字体颜色
    void recvFonttype(QFont fFont);//接受字体类型
    void recvFontSize(int fSize);//接受字体大小
    void help_clicked();//帮助菜单
    void savetypejpg();
    void savetypepng();
    void savetypegif();
    void Cut();//剪切
    void Brush();//刷子
    double getSpeed(QPoint a, QPoint b, long time);//获取两点间的速度
    void BrushGun();//喷枪
    void WaterPen();

};

#endif // MYPAINT_H
